package com.copm.demonstrationsystem.dao.modulemanagefeatures;

import com.copm.demonstrationsystem.pojo.modulemanagefeatures.ModuleBar;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface ModuleBarDao extends JpaRepository<ModuleBar,Long>{

    /**
     * 1、选取被选取的激活一级菜单列表
     * @return
     */
    @Query(value = "select * from module_bar where bar_level = 1 and enable = true",nativeQuery = true)
    List<ModuleBar> getEnableMainBars();

    /**
     * 1、选取指定一级菜单下面的激活二级菜单
     * @param parentId
     * @return
     */
    @Query(value = "select * from module_bar where parent_id = :parentId and enable = true", nativeQuery = true)
    List<ModuleBar> getEnableSecondBars(@Param("parentId") Long parentId);

    /**
     * 选取指定一级菜单下面的全部二级菜单
     * @param parentId：父级菜单的id
     * @return
     */
    @Query(value = "select * from module_bar where parent_id = :parentId", nativeQuery = true)
    List<ModuleBar> getSecondBars(@Param("parentId") Long parentId);

    /**
     * 1、选取全部一级菜单
     * @return
     */
    @Query(value = "select * from module_bar where bar_level = 1",nativeQuery = true)
    List<ModuleBar> getMainBars();

    /**
     * 1、设置这个菜单是否被启用，这个方法必须添加事物控制
     * @param barId：菜单的id
     * @param enable：是否被启用
     * @return 被影响的数据量
     */
    @Transactional
    @Modifying
    @Query(value = "update ModuleBar bar set bar.enable = :enable where bar.id = :barId")
    Integer updateEnableOfBar(@Param("barId") Long barId,@Param("enable") boolean enable);

    /**
     * 1、设置这个菜单的模块名称
     * @param barId：菜单的id
     * @param name：新的模块名称
     * @return 被影响的数据量
     */
    @Transactional
    @Modifying
    @Query(value = "update ModuleBar bar set bar.description = :name where bar.id = :barId")
    Integer updateNameOfBar(@Param("barId") Long barId,@Param("name") String name);
}
